敏感性資料,如資料庫帳號密碼、key等通常不會寫死在程式碼裡,獨立出來一個config檔,在Docker裡,可以利用environment來設定這些敏感資料,environment變數只有在build階段存在。
PostgreSQL image可以指定Password環境變數,
version: '3' 
services:   
  db:
    image: 'postgres:latest'
    environment:
      POSTGRES_PASSWORD: secret
  nest-app: # nestjs app name
    restart: always
    build: 
      context: .
      dockerfile: Dockerfile.dev
    ports: 
      - '8080:3000'
    volumes:
      - /usr/nestapp/node_modules
      - /gitrepo/iron-nest/src:/usr/nestapp/src
      - /gitrepo/iron-nest/test:/usr/nestapp/test
    environment:
      - DBUSER=postgres
      - DBPW=secret 
      - DBHOST=db
      - DBPORT=5432
    depends_on:
      - db
而對於node.js應用程式而言,環境變數可以用process.env.變數名稱 存取到
在main.ts中
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
  Logger.log(`PostgreSQL Host: ${process.env.DBHOST}`);
  Logger.log(`PostgreSQL User: ${process.env.DBUSER}`);
  Logger.log(`PostgreSQL PW: ${process.env.DBPW}`);
  Logger.log(`PostgreSQL Port: ${process.env.DBPORT}`);
}
bootstrap();
docker-compose up --build

nodejs應用程式可以讀取docker-compose所設定的環境變數